package com.mindskip.xzs.configuration.spring.security;
//自定义访问拒绝处理器类
// 当用户尝试访问受保护的资源但未经授权时，Spring Security 会抛出 AccessDeniedException 异常。
//RestAccessDeniedHandler 类的作用是捕获这个异常，并自定义处理该异常的行为。
//在前端应用中，当用户尝试访问需要特定权限的资源但权限不足时，前端会收到一个访问被拒绝的响应。
//这个响应通常会包含一个特定的状态码和消息，告知前端用户访问被拒绝的原因。
//在后端，RestAccessDeniedHandler 的 handle 方法被调用来处理访问被拒绝的情况。
//在 handle 方法中，通过调用 RestUtil.response(httpServletResponse, SystemCode.AccessDenied) 方法，向客户端发送一个包含访问被拒绝信息的响应。
//SystemCode.AccessDenied 可能是一个枚举类型，用来表示访问被拒绝的状态码或消息。
import com.mindskip.xzs.base.SystemCode;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.web.access.AccessDeniedHandler;
import org.springframework.stereotype.Component;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

// 使用@Component注解将这个类声明为一个Spring组件
@Component
// 自定义访问拒绝处理器类，实现AccessDeniedHandler接口
public class RestAccessDeniedHandler implements AccessDeniedHandler {

    // 重写handle方法，处理访问拒绝异常
    @Override
    public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, AccessDeniedException e) throws IOException, ServletException {
        // 使用自定义工具类RestUtil向客户端发送访问拒绝的响应
        RestUtil.response(httpServletResponse, SystemCode.AccessDenied);
    }
}
